#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>

void x1handler(int signo)
{
  printf("catch a signal: %d\n", signo);
}

volatile int flag = 1;
void handler(int signo)
{
  flag = 0;
  printf("flag changs from 1 to 0\n");
}


void h1andler(int signo)
{
  while (1){
    pid_t ret =  waitpid(-1, NULL, WNOHANG);
    if (ret > 0){
      printf("wait child success,pid is %d\n", ret);
      break;
    }
  }

}

//int main()
//{
//  //signal(SIGCHLD, handler);
//  signal(SIGCHLD, SIG_IGN);
//
//  pid_t id = fork();
//  if (id == 0){
//    // child
//    int  count = 3;
//    while(count--){    
//      printf("I am child,pid is %d\n", getpid());
//      sleep(1);
//    }
//    exit(-1);
//  }
//
//  while (1){
//    printf("I am father...\n");
//    sleep(1);
//  }
//  return 0;
//}

int main()
{
  signal(2, handler);

  while (flag);

  printf("running here...\n");
  return 0;
}

//int main()
//{
//  struct sigaction act, oact;
//
//  act.sa_flags = 0;// 选项 设置为0
//  sigfillset(&act.sa_mask);
//  act.sa_handler = handler;
//  // 对2号信号修改处理动作
//  sigaction(2, &act, &oact);
//  //signal(8, handler);
//  while (1){
//    //printf("I am running...\n");
//    raise(2);
//    sleep(1);
//  }
//  return 0;
//}
